iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Modern Web

Django新手指南系列 第 17

子曰:有朋自遠方來(?) 修改資料表中的資料 江狗(Django) 鐵人Day17

  • 分享至 

  • xImage
  •  

上回我們能在後台看到Postman新增的一筆資料了,既然能新增資料就能刪除與修改資料。

修改資料表中的一筆資料

urls.py中新增revise_classlist路徑:

#<urls.py>

path('revise_classlist/',views.revise_classlist)

我們打開VScode找到Viws.py
班級資料表(classlist)下方再添加一項修改資料(revise_classlist):

#<Views.py>

@csrf_exempt
def revise_classlist(request):
    outputinfo={}
    if request.method == "POST":
        try:
            data = json.loads(request.body)
            classmember = Classlist.objects.get(Name=data['Name'])
            classmember.Grade = data['Grade']
            classmember.Class = data['Class']
            classmember.Gender = data['Gender']
            classmember.Number = data['Number']
            classmember.save()
            outputinfo = {"修改成功,已修改資料如下":
                          {"Grade": classmember.Grade,
                           "Class": classmember.Class,
                           "Gender": classmember.Gender,
                           "Number": classmember.Number,
                           "Name": classmember.Name,
                           "Upload_Time": classmember.Upload_Time,
                           "Last_Modified": classmember.Last_Modified}}
        except:
            outputinfo["錯誤:"] = "沒有這個名字的學生"
    else:
        outputinfo['資料類型錯誤'] = "請使用POST輸入"
    return JsonResponse(outputinfo, safe=False, json_dumps_params={'ensure_ascii': False})

我們分析一下上面這些在做什麼:

1. CSRF

@csrf_exempt

2. 項目名稱、JSON輸出設定、判斷輸入類型

def revise_classlist(request):
    
    if request.method == "POST":
    else:
        outputinfo['資料類型錯誤'] = "請使用POST輸入"

3. 嘗試執行與意外處理:

目的:嘗試執行(try:)內部的指令若內部指令發生重大錯誤無法繼續運行時執行例外(except:)內的程式。

try:
    (...)
except:
    #輸出錯誤狀態
    outputinfo["錯誤:"] = "沒有這個名字的學生"

4. 獲取班級資料表(classlist)關鍵字的一筆資料

目的:<資烙表名稱>.objects.get是很好用的指令,但也有一定風險,
當你要尋找的資料確定存在並且只存在一筆資料時可以使用。
用法:抓取只存在一筆資料的結果存入前方變數,若要取資料表其中欄位的值時只需在變數後方添加想帶入的欄位參數即可。

#<資料表變數>=<資料表名稱>.objects.get(資料表欄位名稱 = data['<輸入參數名稱>']
classmember = Classlist.objects.get(Name=data['Name'])

5. 資料寫入與存入資料

輸入資料格式為JSON,需要先轉換為Python能認得的格式才能處理。

#<變數> = <json格式轉python格式>(<獲取輸入資料的位置>)
data = json.loads(request.body)
#<資料表變數>.<欄位名稱> = data['<輸入的資料>]']
classmember.Grade = data['Grade']
classmember.Class = data['Class']
classmember.Gender = data['Gender']
classmember.Number = data['Number']
#<資料表變數>.<儲存>()
classmember.save()

6. 輸出修改後的格式

outputinfo = {"修改成功,已修改資料如下":
             {"Grade": classmember.Grade,
              "Class": classmember.Class,
              "Gender": classmember.Gender,
              "Number": classmember.Number,
              "Name": classmember.Name,
              "Upload_Time": classmember.Upload_Time,
              "Last_Modified": classmember.Last_Modified}}

7. JSON格式輸出

return JsonResponse(outputinfo, safe=False, json_dumps_params={'ensure_ascii': False})

這樣就完成了,用Postman測試看看:

我們修改ID為1的王曉明,將班級改為甲班、號碼變更為31號:

看看資料表是否有變更:

這樣就成功了,下回來教怎麼把資料刪除吧!
大家掰掰~

圖片來源:子曰


上一篇
主機板安裝在顯卡上 admin後台顯示資料 江狗(Django) 鐵人Day16
下一篇
孔子:工欲善其事(?) 刪除資料表中的資料 江狗(Django) 鐵人Day18
系列文
Django新手指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言